Next:
String Range
, Previous:
Implement Flyweight design pattern
, Up:
Index
Fault Access
class
FormattedText
{
string
plainText
;
bool
*
caps
;
// plainText
와
동
일
한
크
기
의
bool
배
열
public
:
explicit
FormattedText
(
const
string
&
plainText
)
:
plainText
(
plainText
)
{
caps
=
new
bool
[
PlainText
.
length
(
)]
;
}
~
FormattedText
(
)
{
delete
[
]
caps
;
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
FormattedText
&
obj
)
{
string
s
;
for
(
int
i
=
0
;
i
<
obj
.
plainText
.
length
(
)
;
++
i
)
{
char
c
=
obj
.
plainText
[
i
]
;
s
+=
(
obj
.
caps
[
i
]
?
toupper
(
c
)
:
c
)
;
}
return
os
<<
s
;
}
}
;
void
capitalize
(
int
start
,
int
end
)
{
for
(
int
i
=
start
;
i
<=
end
;
++
i
)
{
caps
[
i
]
=
true
;
}
}
//
사
용
FormattedText
ft
(
"
This is a brave new world
"
)
;
ft
.
capitalize
(
10
,
15
)
;
cout
<<
ft
<<
endl
;
위의 코드는 flyweight 디자인 패턴을 적용하지 않음.
텍스트의 모든 문자마다 이진 플래그를 만들어서 사용하기 때문에, 메모리 사용에 비효율적임